﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Generic.Contract;

namespace Contract.Business.Entity
{
    //Criado por : Gustavo
    //Data       : 12/23/2011 6:33:54 PM
    public class BEPromocao : BEGeneric
    {
        #region Atributos
        private string _Nome;
        private DateTime? _DataInicio;
        private DateTime? _DataFim;
        private bool _ParaSempre;
        private string _DiasSemana;
        private decimal? _Desconto;
        private BEProduto _ProdutoGratis;
        private int? _CodigoProdutoGratis;
        private BEProduto _ProdutoPromocao;
        private int? _CodigoProdutoPromocao;
        private decimal? _DescontoPromocao;
        private bool _Ativo;
        #endregion

        #region Propriedades
        public string Nome
        {
            get
            {
                return this._Nome;
            }
            set
            {
                if (this._Nome != value)
                {
                    this.SendPropertyChanging();
                    this._Nome = value;
                    this.SendPropertyChanged("Nome");
                }
            }
        }

        public DateTime? DataInicio
        {
            get
            {
                return this._DataInicio;
            }
            set
            {
                if (this._DataInicio != value)
                {
                    this.SendPropertyChanging();
                    this._DataInicio = value;
                    this.SendPropertyChanged("DataInicio");
                }
            }
        }

        public DateTime? DataFim
        {
            get
            {
                return this._DataFim;
            }
            set
            {
                if (this._DataFim != value)
                {
                    this.SendPropertyChanging();
                    this._DataFim = value;
                    this.SendPropertyChanged("DataFim");
                }
            }
        }

        public bool ParaSempre
        {
            get
            {
                return this._ParaSempre;
            }
            set
            {
                if (this._ParaSempre != value)
                {
                    this.SendPropertyChanging();
                    this._ParaSempre = value;
                    this.SendPropertyChanged("ParaSempre");
                }
            }
        }

        public string DiasSemana
        {
            get
            {
                return this._DiasSemana;
            }
            set
            {
                if (this._DiasSemana != value)
                {
                    this.SendPropertyChanging();
                    this._DiasSemana = value;
                    this.SendPropertyChanged("DiasSemana");
                }
            }
        }

        public decimal? Desconto
        {
            get
            {
                return this._Desconto;
            }
            set
            {
                if (this._Desconto != value)
                {
                    this.SendPropertyChanging();
                    this._Desconto = value;
                    this.SendPropertyChanged("Desconto");
                }
            }
        }

        public BEProduto ProdutoGratis
        {
            get
            {
                return this._ProdutoGratis;
            }
            set
            {
                BEProduto previousValue = this._ProdutoGratis;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._ProdutoGratis = value;
                    if (value != null)
                    {
                        this._CodigoProdutoGratis = value.Codigo;
                    }
                    else
                    {
                        this._CodigoProdutoGratis = default(int);
                    }
                    this.SendPropertyChanged("ProdutoGratis");
                }
            }
        }

        public int? CodigoProdutoGratis
        {
            get
            {
                return this._CodigoProdutoGratis;
            }
            set
            {
                if (this._CodigoProdutoGratis != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoProdutoGratis = value;
                    this.SendPropertyChanged("CodigoProdutoGratis");
                }
            }
        }

        public BEProduto ProdutoPromocao
        {
            get
            {
                return this._ProdutoPromocao;
            }
            set
            {
                BEProduto previousValue = this._ProdutoPromocao;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._ProdutoPromocao = value;
                    if (value != null)
                    {
                        this._CodigoProdutoPromocao = value.Codigo;
                    }
                    else
                    {
                        this._CodigoProdutoPromocao = default(int);
                    }
                    this.SendPropertyChanged("ProdutoPromocao");
                }
            }
        }

        public int? CodigoProdutoPromocao
        {
            get
            {
                return this._CodigoProdutoPromocao;
            }
            set
            {
                if (this._CodigoProdutoPromocao != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoProdutoPromocao = value;
                    this.SendPropertyChanged("CodigoProdutoPromocao");
                }
            }
        }

        public decimal? DescontoPromocao
        {
            get
            {
                return this._DescontoPromocao;
            }
            set
            {
                if (this._DescontoPromocao != value)
                {
                    this.SendPropertyChanging();
                    this._DescontoPromocao = value;
                    this.SendPropertyChanged("DescontoPromocao");
                }
            }
        }

        public bool Ativo
        {
            get
            {
                return this._Ativo;
            }
            set
            {
                if (this._Ativo != value)
                {
                    this.SendPropertyChanging();
                    this._Ativo = value;
                    this.SendPropertyChanged("Ativo");
                }
            }
        }


        #endregion

        #region Métodos Override
        public override string ToString()
        {
            return this.Nome;
        }

        public override bool Equals(object obj)
        {
            try
            {
                return this.Codigo == ((BEPromocao)obj).Codigo;
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion
    }
}
